class Solution {
public:
    int add(int a, int b) {
        // 老师视频讲解，暂时还不懂原理
        if(a == 0) return b;
        if(b == 0) return a;

        int A = a ^ b;
        int B = (a & b) << 1;
        return add(A, B);

        // 下面这种是我自己想的
        // int num[32];
        // int tmp = 0;
        // for(size_t i = 0; i < 32; i++)
        // {
        //     if((((a >> i) & 1) == 1) && (((b >> i) & 1) == 1))
        //     {
        //         if(tmp == 0)
        //         {
        //             num[i] = 0;
        //             tmp = 1;
        //         }
        //         else
        //         {
        //             num[i] = 1;
        //             tmp = 1;
        //         }
        //     }
        //     else if(((((a >> i) & 1) == 1) && (((b >> i) & 1) == 0))  || ((((a >> i) & 1) == 0) && (((b >> i) & 1) == 1)))
        //     {
        //         if(tmp == 0)
        //         {
        //             num[i] = 1;
        //         }
        //         else
        //         {
        //             num[i] = 0;
        //         }
        //     }
        //     else
        //     {
        //         if(tmp == 0)
        //         {
        //             num[i] = 0;
        //         }
        //         else
        //         {
        //             num[i] = 1;
        //             tmp = 0;
        //         }
        //     }
        // }
        // int ret = 0;
        // for(size_t i = 0; i < 32; i++)
        // {
        //     ret |= (num[i] << i);
        // }
        // return ret;

        // 新年快乐呀嘻嘻
    }
};